//
//  CZTabBar.swift
//  WeiBo
//
//  Created by Apple on 16/9/13.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit


//  定义协议
protocol CZTabBarDelegate: NSObjectProtocol {
    //  点击撰写按钮
    func didSelectedComposeButton()
}

class CZTabBar: UITabBar {
    
    //  点击撰写按钮执行的闭包
    var composeButtonClosure: (()->())?
    //  定义代理对象，注意弱引用，防止循环引用
    weak var czDelegate: CZTabBarDelegate?
    
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .highlighted)
        
        button.sizeToFit()
        return button
    }()

    //  手写代码的方式调用
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    //  使用xib/sb的时候调用此方法，如果没有实现xib有提示，让用户知道使用xib方式加载视图不可以
    required init?(coder aDecoder: NSCoder) {
        //  支持xib的写法
        super.init(coder: aDecoder)
        setupUI()
    }

    private func setupUI() {
    
        //  push导航栏变成黑色设置背景图片
        backgroundImage = UIImage(named: "tabbar_background")
        
        addSubview(composeButton)
    
    }
    
    // MARK:    -点击撰写按的事件
    //  @objc 表示使用oc的方式基于动态运行机制，向对象发送消息， 不能定义private的函数，因为在swift运行循环里面是找不到的
    @objc private func composeButtonAction() {
    
        print("撰写按钮点击了")
        //  执行撰写按钮的闭包
        composeButtonClosure?()
        //  我是代理访问调用过来的
        czDelegate?.didSelectedComposeButton()
        
    }
    
    
    //  给子控件布局
    override func layoutSubviews() {
        super.layoutSubviews()
        //  设置撰写按钮的中心点
        composeButton.center.x = frame.size.width / 2
        composeButton.center.y = frame.size.height / 2
        
        //  设置系统按钮的大小
        let itemWidth = frame.size.width / 5
        
        //  找到系统按钮进行修改
        var index = 0
        for value in subviews {
            //  系统按钮的类型
            if value.isKind(of: NSClassFromString("UITabBarButton")!) {
                //  设置宽度
                value.frame.size.width = itemWidth
                value.frame.origin.x = CGFloat(index) * itemWidth
                index += 1
                //  如果第二个系统按钮的索引让其多加一个按钮的宽度
                if index == 2 {
                    index += 1
                }
                
            }
        }
        
        
    }
    
    
    
    
    
    
}
